课程主页:

https://www.icourse163.org/course/NUDT-1003101005?tid=1460976445

这次回顾第2讲:高级程序设计语言概述。

第2讲 高级程序设计语言概述

常用的高级程序设计语言

语言 特点
FORTRAN 数值计算
COBOL 事务处理
PASCAL 结构化程序设计
LISP 函数式程序设计
PROLOG 逻辑程序设计
C 系统程序设计
Smalltalk 面向对象程序设计
Java Internet应用,可移植性
Python 解释型
高级程序设计语言的优点
  • 相对机器语言或汇编语言,高级程序设计语言
    • 更接近于数学语言和工程语言,更直观、自然和易于理解
    • 更容易验证其正确性、改错
    • 编写程序的效率更高
    • 更容易移植

程序设计语言的定义

程序设计语言的定义包括以下几个方面

  • 语法
  • 语义
  • 语用

这里只讨论前两者。

语法
  • 程序本质上是一组字符集上的字符串

  • 语法:一组规则,用它可以形成和产生一个合式(well-formed)的程序

  • 词法规则:单词符号的形成规则

    • 单词符号是语言中具有独立意义的最基本结构
    • 一般包括:常数、标识符、基本字、算符、界符等
    • 描述工具:有限自动机
  • 语法规则:语法单位的形成规则

    • 语法单位通常包括:表达式、语句、分程序、过程、函数、程序等;

    • 描述工具:上下文无关文法

    • 语法例子,表示算数表达式:

  • 语法规则和词法规则定义了程序的形式结构

  • 定义语法单位的意义属于语义问题

语义
  • 语义
    • 一组规则,用它可以定义一个程序的意义
  • 描述方法
    • 自然语言描述
      • 二义性、隐藏错误和不完整性
    • 形式描述(从略)
      • 操作语义
      • 指称语义
      • 代数语义
程序语言的基本功能和层次结构
  • 程序,本质上说是描述一定数据的处理过程
  • 程序语言的基本功能
    • 描述数据和对数据的运算
  • 层次结构

高级程序设计语言的一般特性

高级语言的分类
  • 强制式语言(Imperative Languge)/过程式语言
    • 命令驱动,面向语句
    • FORTRAN、C、Pascal,Ada
  • 应用式语言(Applicative Language)
    • 注重程序所表示的功能,而不是一个语句接一个语句地执行
    • LISP、ML
  • 基于规则的语言(Rule-based Language)
    • 检查一定的条件,当它满足值,则执行适当的动作
    • Prolog
  • 面向对象语言(Object-Oriented Language)
    • 封装、继承和多态性
    • Smalltalk,C++,Java
程序结构

这部分介绍了FORTRA,PASCAL,JAVA的程序结构,细节从略。

数据结构与操作
  • 数据类型通常包括三要素
    • 用于区别这种类型数据对象的属性
    • 这种类型的数据对象可以具有的值
    • 可以作用于这种类型的数据对象的操作
标识符与名字
  • 标识符
    • 以字母开头的,由字母数字组成的字符串
  • 名字
    • 标识程序中的对象

这里老师举了一个很形象的例子:

Jordan这个单词只是个标识符,绑定之后可以指运动员乔丹或者国家约旦。

名字
  • 名字的意义和属性
    • 值:单元中的内容
    • 属性:类型和作用域
  • 名字的说明方式
    • 由说明语句来明确规定
      • int score
    • 隐含说明
      • FORTRAN 以I,J,K,…N为首的名字代表整型,否则为实型
    • 动态确定
      • 走到哪里,是什么,算什么
标识符
  • 标识符
    • 以字母开头的,由字母数字组成的字符串
  • 标识符与名字两者有本质区别
    • 标识符是语法概念
    • 名字有确切的意义和属性
数据结构

这部分简介了基本的数据结构,这里只回顾一个不太熟悉的概念、

  • 内情向量
    • 登记维数,各维的上、下限,首地址,以及数组(元素)的类型等信息
语句与控制结构
  • 表达式

    • 表达式由运算量(也称操作数,即数据引用或函数调用)和算符(运算符,操作符)组成

    • 形式:中缀、前缀、后缀

  • 表达式形成规则

    • 变量(包括下标变量)、常数是表达式。
      • 若$\mathrm E_1,\mathrm E_2$为表达式,$θ$是一个二元算符,则$\mathrm E_1 θ\mathrm E_2$是表达式。
      • 若$\mathrm E$是表达式,$θ$为一元算符,则$θ\mathrm E$(或$\mathrm Eθ$)是表达式。
      • 若$\mathrm E$是表达式,则$(\mathrm E)$是表达式。
算符的优先次序
  • 一般的规定
    • PASCAL:左结合A+B+C=(A+B)+C
    • FORTRAN:对于满足左、右结合的算符可任取一种,如A+B+C就可以处理成(A+B)+C,也可以处理成A+(B+C)
  • 注意两点
    • 代数性质能引用到什么程度视具体的语言而定
    • 在数学上成立的代数性质在计算机上未必完全成立
      • A + B = B + A
语句
  • 赋值语句

    • A := B
    • 名字的左值:该名字代表的存储单元的地址
    • 名字的右值:该名字代表的存贮单元的内容
  • 控制语句

    • 无条件转移语句

      goto L
    • 条件语句

      if B then S
      if B then S1 else S2
    • 循环语句

      while B do S
      repeat S until B
      for i:=E1 step E2 until E3 do S
    • 过程调用语句

      call P(X1, X2, ... ,Xn)
    • 返回语句

      return (E)
语句的分类
  • 按功能分类

    • 执行语句:描述程序的动作
    • 说明语句:定义各种不同数据类型的变量或运算,定义名字的性质
  • 形式

    • 简单句:不包含其他语句成分的基本句

      A = B + C ;
      goto 105 ;
    • 复合句:句中有句的语句

      while (i >= 0) {
          j = i * 10;
          i++;
      }